/****************************************************************
 **  Nombre: DAORespuestasEHE.java                          *
 **  Version: 1.0.0                                             *
 **  Diagrama: GAPI v4.7.1                                      *
 **  Autor: Alberto Castro                       *
 **  Creado: 06-abril-2013
 *   Caso de uso: MPE1,MPE2
 **  Modificado:                                                *
 ***************************************************************/

package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.PreguntaEHE;
import Dominio.RespuestaEHE;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Clase que controla el acceso a la base de datos de las repsuestas de habitos de estudio.
 * 
 */
public class DAORespuestasEHE {

    private final String TABLA_RESPUESTAS_EHE = "respuestas_ehe";
    private final String COLUMNA_CLAVE_RESPUESTA_EHE = "cve_respuesta";
    private final String COLUMNA_CLAVE_PREGUNTA_EHE = "cve_pregunta";
    private final String COLUMNA_NOMBRE_USUARIO = "usuario";
    private final String COLUMNA_RESPUESTA = "respuesta";
    private AccesoBaseDatos acceso;
    private Connection conexion;
    /**
     * Constructor de la clase
     */
     public DAORespuestasEHE() {
        acceso = new AccesoBaseDatos();
        conexion = acceso.abrirConexion();
    }
/**
 * Cierra la conexion a la base de datos.
 */
    public void cerrarConexionARespuestasEHE() {
        acceso.cerrarConexion(conexion);
    }

    private boolean existeRespuestaDeAlumnoParaLaPregunta(String nombreUsuario, int clavePregunta) {
         ResultSet resultadoBusqueda = null;

        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
             String querySearch = "SELECT * FROM " + TABLA_RESPUESTAS_EHE + " WHERE "
                    + COLUMNA_NOMBRE_USUARIO +" = '" + nombreUsuario + "' AND "
                    + COLUMNA_CLAVE_PREGUNTA_EHE+" = '"+clavePregunta+"';";
            resultadoBusqueda = sentencia.executeQuery(querySearch);
            
            int contadorRegistros = 0;
            while(resultadoBusqueda.next()) {
                contadorRegistros++;
            }
            
            if(contadorRegistros != 0) {
                return true;
            }
            
        }catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de buscar las preguntas");
        }
        return false;
    }       
    /**
     * Registra las respuestas del alumno
     * @param listaRespuestas Lista de repsuestas
     */
    public void registrarRespuestasDeAlumno(ArrayList<RespuestaEHE> listaRespuestas) {
        
        for(int i = 0; i < listaRespuestas.size(); i++) {
            try {
                RespuestaEHE respuestaEHE = listaRespuestas.get(i);
                int clavePreguntaEHE = respuestaEHE.getPreguntaEHE().getClavePregunta();
                String nombreUsuario = respuestaEHE.getNombreUsuario();
                int respuesta = respuestaEHE.getRespuesta();
                
                Statement sentencia = acceso.crearSentenciaBD(conexion);
                
                String query = "";
                
                if(existeRespuestaDeAlumnoParaLaPregunta(nombreUsuario, clavePreguntaEHE)) {
                    query = "UPDATE " + TABLA_RESPUESTAS_EHE +" SET "
                        +COLUMNA_RESPUESTA+" = '"+respuesta+"' WHERE "                        
                        +COLUMNA_CLAVE_PREGUNTA_EHE+" = '"+clavePreguntaEHE+"' AND "
                        +COLUMNA_NOMBRE_USUARIO+" = '"+nombreUsuario+"';";                        
                }
                else {
                    query = "INSERT INTO " + TABLA_RESPUESTAS_EHE +" ("
                        + COLUMNA_CLAVE_PREGUNTA_EHE + ", " +COLUMNA_NOMBRE_USUARIO+", "+COLUMNA_RESPUESTA+") VALUES ('"
                        + clavePreguntaEHE +"', '" + nombreUsuario + "', '"+respuesta+"');";
                }                
                
                sentencia.executeUpdate(query); 
                
            } catch (SQLException ex) {
                Logger.getLogger(DAORespuestasEHE.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Ocurrió un problema al tratar de registrar las preguntas");
            }
        }                        
    }
    /**
     * busca las respuestas de habitos de estudio del alumno
     * @param nombreUsuario Nombre de usuario del alumno.
     * @param preguntaEHE Pregunta de habito de estudio
     * @return La respuesta respectiva a la pregunta de habito de estudio.
     */
    public RespuestaEHE buscarRespuestaEHE(String nombreUsuario, PreguntaEHE preguntaEHE) {
        
         RespuestaEHE respuestaEHE = null;
        
        try {                                       
            int clavePreguntaEHE = preguntaEHE.getClavePregunta();
            
            Statement sentencia = acceso.crearSentenciaBD(conexion);
                 String querySearch = "SELECT * FROM " + TABLA_RESPUESTAS_EHE + " WHERE "
                        + COLUMNA_NOMBRE_USUARIO +" = '" + nombreUsuario + "' AND "
                        + COLUMNA_CLAVE_PREGUNTA_EHE+" = '"+clavePreguntaEHE+"';";
            ResultSet resultadoBusqueda = sentencia.executeQuery(querySearch);
                
            while(resultadoBusqueda.next()) {
                int claveRespuestaEHE = resultadoBusqueda.getInt(1);
                int respuesta = resultadoBusqueda.getInt(4);
                
                respuestaEHE = new RespuestaEHE();
                respuestaEHE.setClaveRespuesta(claveRespuestaEHE);
                respuestaEHE.setNombreUsuario(nombreUsuario);
                respuestaEHE.setRespuesta(respuesta);
                respuestaEHE.setPreguntaEHE(preguntaEHE); 
            }
                
        } catch (SQLException ex) {
            Logger.getLogger(DAORespuestasEHE.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return respuestaEHE;
    }
    /**
     * Elimina las respuestas de habito de estudio del alumno
     * @param nombreUsuario Nombre de usuario del alumno
     */
    public void eliminarRespuestasEHEDelAlumno(String nombreUsuario) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String deleteQuery = "DELETE FROM " + TABLA_RESPUESTAS_EHE + " WHERE " + COLUMNA_NOMBRE_USUARIO + " = '" + nombreUsuario + "'";
            sentencia.executeUpdate(deleteQuery);
        } catch (SQLException ex) {
            Logger.getLogger(DAORespuestasEHE.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
